package com.vlong.town.mapper.menu;

import java.util.HashMap;
import java.util.List;

import org.apache.ibatis.annotations.Mapper;

import com.vlong.town.entity.menu.Menu;

/**
 * 系统菜单DAO接口
 * @author Assassin
 */
@Mapper
public interface MenuMapper {

	// Methods

   /**
	* 插入系统菜单
	* @param menu 参数实体
	* @return menuId 插入后的数据库主键值
	*/
	public Long insert(Menu menu);

   /**
	* 删除系统菜单
	* @param menuId 主键值
	*/
	public void delete(Long menuId);

   /**
	* 更新系统菜单
	* @param menu 参数实体
	*/
	public void update(Menu menu);

   /**
	* 主键查询系统菜单
	* @param menu 参数实体
	* @return Menu 实体
	*/
	public Menu selectById(Long menuId);

   /**
	* 根据条件查询系统菜单列表
	* @param menu 参数实体
	* @return List<Menu> 实体List
	*/
	public List<Menu> selectList(Menu menu);
	
	/**
	 * 根据菜单级别和父菜单Id查询当前数据库菜单最大编码
	 * @param paramsMap 参数Map
	 * @return 菜单最大编码
	 */
	public String selectCurrentMaxMenuCode(HashMap<String, Object> paramsMap);
	
	/**
	 * 更新菜单是否父级信息
	 * @param paramsMap 参数Map
	 */
	public void updateIsParent(HashMap<String, Object> paramsMap);
	
	/**
	 * 更新菜单状态（逻辑删除 | 恢复）
	 * @param paramsMap 参数Map
	 */
	public void updateIsDel(HashMap<String, Object> paramsMap);
	
	/**
	 * 根据父菜单Id更新菜单状态（逻辑删除 | 恢复）
	 * @param paramsMap 参数Map
	 */
	public void updateIsDelByPid(HashMap<String, Object> paramsMap);
	
	/**
	 * 根据父Id查询子菜单信息
	 * @param paramsMap 参数Map
	 * @return List<Menu>
	 */
	public List<Menu> selectSubList(HashMap<String, Object> paramsMap);
	
	/**
	 * 查询角色对应的菜单信息
	 * @param roleId 角色Id
	 * @return List<Menu>
	 */
	public List<Menu> selectMenuByRoleId(Long roleId);
	
	/**
	 * 根据属性验证菜单是否存在
	 * @param paramsMap 参数Map
	 * @return List<Menu>
	 */
	public List<Menu> selectIsMenuExist(HashMap<String, Object> paramsMap);

}